package com.interview.ujiuye4;

public class LinkedList {
    public static void main(String[] args) {
        Node node = new Node(1);
        node.next = new Node(2);
        node.next.next = new Node(3);
        node.next.next.next = new Node(4);
        Node res = reverse(node);
        System.out.println(res);
    }

    public static Node reverse(Node node){
        //如何链表没有元素，返回null值。
        if(node == null){
            return null;
        }

        //如果链表只有一个元素，不必要反转，返回链表本身就行。
        if(node.next == null){
            return node;
        }

        //当链表超过两个及以上就需要反转
        Node pre = null;//用于保存当前节点的前一个节点
        Node cur = node;//cur保存当前节点

        while(cur != null){
            Node next = cur.next;//获取当前节点的下一个元素
            cur.next = pre;//把当前节点的next指向前一个元素
            pre = cur;//把当前节点改为前一个节点（其实就是前一个元素后移一位）。
            cur = next;//把当前节点的下一个节点改为当前节点（其实就是前一个元素后移一位）。
        }

        //因为反转后pre是第一个节点，所以返回pre.
        return pre;
    }
}

class Node{
    public Integer data;
    public Node next;
    public Node(Integer data) {
        super();
        this.data = data;
    }
    @Override
    public String toString() {
        return "Node [data=" + data + ", next=" + next + "]";
    }
}